import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 非登录请求添加token
    if (!config.url.includes('/admin/employee/login')) {
      const token = localStorage.getItem('token')
      if (token) {
        config.headers.token = token
      }
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data
    console.log('响应拦截器收到响应:', res)
    if (res.code === 1 || res.code === 0 || res.code === 200) {
      console.log('响应状态码有效:', res.code)
      return res
    }
    
    ElMessage.error(res.msg || '请求失败')
    return Promise.reject(new Error(res.msg || '请求失败'))
  },
  error => {
    const msg = error.response?.data?.msg || error.message || '网络请求失败'
    ElMessage.error(msg)
    
    if (error.response?.status === 401) {
      localStorage.removeItem('token')
      location.href = '/login'
    }
    
    return Promise.reject(error)
  }
)

/**
 * 员工模块API
 */
export default {
  /**
   * 员工登录
   * @param {Object} data 登录信息
   * @param {string} data.username 用户名
   * @param {string} data.password 密码
   */
  login(data) {
    return request({
      url: '/admin/employee/login',
      method: 'post',
      data
    })
  },

  /**
   * 退出登录
   */
  logout() {
    return request({
      url: '/admin/employee/logout',
      method: 'post'
    })
  },

  /**
   * 根据id获取员工详情
   * @param {number} id 员工id
   */
  getById(id) {
    if (!id) {
      console.error('getById API调用错误: 缺少员工ID');
      return Promise.reject(new Error('缺少员工ID'));
    }
    
    console.log('调用getById API获取员工信息, ID:', id);
    
    // 添加头部验证信息
    const token = localStorage.getItem('token');
    const headers = token ? { token } : {};
    
    return request({
      url: `/admin/employee/${id}`,
      method: 'get',
      headers
    }).then(res => {
      console.log('getById API返回原始数据:', res);
      if (res.code === 1 || res.code === 0 || res.code === 200) {
        console.log('getById API返回处理后的数据:', res.data);
        return res.data;
      }
      return Promise.reject(new Error(res.msg || '获取员工信息失败'));
    }).catch(error => {
      console.error('getById API请求失败:', error);
      throw error;
    });
  },

  /**
   * 员工分页查询
   * @param {Object} params 查询参数
   * @param {string} [params.name] 员工姓名，可选
   * @param {number} params.page 页码
   * @param {number} params.pageSize 每页记录数
   */
  getEmployeeList(params) {
    return request({
      url: '/admin/employee/page',
      method: 'get',
      params
    })
  },

  /**
   * 根据id查询员工
   * @param {number} id 员工id
   */
  getEmployeeById(id) {
    return request({
      url: `/admin/employee/${id}`,
      method: 'get'
    })
  },

  /**
   * 新增员工
   * @param {Object} data 员工信息
   */
  addEmployee(data) {
    return request({
      url: '/admin/employee',
      method: 'post',
      data
    })
  },

  /**
   * 编辑员工信息
   * @param {Object} data 员工信息
   */
  updateEmployee(data) {
    return request({
      url: '/admin/employee',
      method: 'put',
      data
    })
  },

  /**
   * 启用、禁用员工账号
   * @param {number} id 员工id
   * @param {number} status 状态，1为启用 0为禁用
   */
  updateStatus(id, status) {
    return request({
      url: `/admin/employee/status/${status}`,
      method: 'post',
      params: { id }
    })
  },

  /**
   * 修改密码
   * @param {Object} data 密码信息
   * @param {string} data.oldPassword 原密码
   * @param {string} data.newPassword 新密码
   */
  updatePassword(data) {
    return request({
      url: '/admin/employee/editPassword',
      method: 'put',
      data
    })
  },

  /**
   * 更新员工信息
   * @param {Object} data 员工信息
   */
  update(data) {
    return request({
      url: '/admin/employee',
      method: 'put',
      data
    }).then(res => {
      if (res.code === 1 || res.code === 0 || res.code === 200) {
        return res.data;
      }
      return Promise.reject(new Error(res.msg || '更新员工信息失败'));
    });
  }
} 